﻿Imports System.Data
Imports System.Web.UI
Imports System
Imports System.Web.UI.WebControls
Imports System.Data.DataRow
Imports Bussines.entity
Imports Bussines.logic
Imports System.Collections.Generic
Imports Microsoft.SharePoint
Imports AjaxPro
Imports System.Net
Imports System.Net.Mail
Imports System.Xml
Imports System.IO
Imports Outlook = Microsoft.Office.Interop.Outlook

Partial Class actaInvitacion
    Inherits System.Web.UI.Page

    Dim equipoBL As New equiposBL
    Dim actaBL As New actasBL
    Dim Util As New utiles()
    Dim IDACTASharepoint As String
    Dim idActa As Integer
    Dim CONSTANTES As New CONSTANTES
    Dim AccionesWF As New AccionesWF

    Dim NumeroActa As String = ""

    Protected Sub gvAsistentes_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvAsistentes.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim text1 As TextBox
            Dim text2 As TextBox
            Dim hidden As HiddenField

            text1 = New TextBox
            text1 = CType(e.Row.FindControl("txtcargoAsistente"), TextBox)
            text1.Text = DataBinder.Eval(e.Row.DataItem, "cargo").ToString()

            hidden = New HiddenField
            hidden = CType(e.Row.FindControl("txtidCorrelativo"), HiddenField)
            hidden.Value = DataBinder.Eval(e.Row.DataItem, "idCorrelativo").ToString()

            hidden = New HiddenField
            hidden = CType(e.Row.FindControl("txtidAsistente"), HiddenField)
            hidden.Value = DataBinder.Eval(e.Row.DataItem, "idAsistente").ToString()

            'bloqueamos el cargo si tiene un asistente elegido 
            'para que no puedan editar el cargo si han elegido un empleado interno
            If hidden.Value <> "" Then
                text1.Enabled = False
            End If

            text2 = New TextBox
            text2 = CType(e.Row.FindControl("txtnomAsistente"), TextBox)
            text2.Text = DataBinder.Eval(e.Row.DataItem, "nombre").ToString()
            text2.Attributes.Add("onfocus", "document.getElementById('" & hdn_asistente_sugget.ClientID & "').value='" & hidden.ClientID & "|" & text1.ClientID & "'")

            Dim elim As ImageButton
            elim = CType(e.Row.FindControl("ibelimAsistente"), ImageButton)
            elim.CommandArgument = e.Row.RowIndex.ToString()
            elim.CommandName = "Eliminar"

            If ViewState("EstadoActa") IsNot Nothing Then
                elim.Visible = False
            End If
            'verifico sin la fila ha sido eliminada logicamente
            Dim strActivo As String = DataBinder.Eval(e.Row.DataItem, "activo").ToString
            If strActivo = "0" Then
                e.Row.Style.Add("display", "none")
            End If

        End If
    End Sub

    Private Sub agregarAsistentes()
        Dim dr As GridViewRow
        Dim cargo, nombre, idAsistente, idCorre As String
        Dim dtAcu As New DataTable
        'creamos un datatable con las columnas que ya estan definidas
        dtAcu = crearTableAsistentes()
        Dim Usuario As New usuariosBL
        For Each dr In gvAsistentes.Rows
            'dr.RowIndex()
            Dim drAcu As DataRow
            drAcu = dtAcu.NewRow()

            Dim text As New TextBox
            Dim hidden As New HiddenField
            'recojo el id del asistente seleccionado
            hidden = CType(dr.FindControl("txtidAsistente"), HiddenField)
            idAsistente = hidden.Value

            'recojo el nombre del asistente seleccionado
            text = CType(dr.FindControl("txtnomAsistente"), TextBox)
            nombre = text.Text.Trim()

            'recojo el cargo del asistente seleccionado
            text = New TextBox
            text = CType(dr.FindControl("txtcargoAsistente"), TextBox)
            cargo = text.Text

            hidden = New HiddenField
            hidden = CType(dr.FindControl("txtidCorrelativo"), HiddenField)
            idCorre = hidden.Value
            Dim dtUsu As New DataTable
            If (idAsistente.Trim <> "") Then
                dtUsu = Usuario.listarUsuarioxId(idAsistente)
                If dtUsu.Rows.Count > 0 Then
                    nombre = dtUsu.Rows(0).Item("NOMBRE").ToString()
                    cargo = dtUsu.Rows(0).Item("CARGO").ToString()
                    idAsistente = dtUsu.Rows(0).Item("ID").ToString()
                End If
            End If


            drAcu("idCorrelativo") = idCorre
            drAcu("idAsistente") = idAsistente
            drAcu("num") = dr.Cells(0).Text
            drAcu("nombre") = nombre
            drAcu("cargo") = cargo
            drAcu("activo") = gvAsistentes.DataKeys(dr.RowIndex).Item("activo").ToString
            dtAcu.Rows.Add(drAcu)
        Next
        ViewState("Asistentes") = dtAcu
    End Sub

    Protected Sub gvAsistentes_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvAsistentes.RowCommand
        'agregamos los asistentes modificados del gridview
        agregarAsistentes()

        If e.CommandName = "Eliminar" Then
            Dim intRow As Integer
            Dim dt As New DataTable
            Dim obj As Object
            obj = ViewState("Asistentes")
            intRow = Convert.ToInt32(e.CommandArgument.ToString())
            If Not obj Is Nothing Then
                dt = CType(obj, DataTable)
                dt.Rows(intRow).Item("activo") = "0"
                ViewState("Asistentes") = dt
                'verifico si esta vacio el datatable para llenarlo con una fila
                If dt.Rows.Count = 0 Then
                    'metodo que llena una fila al datatable y si no existe lo crea el datatable y le agrega una fila
                    llenarAsistentes()
                Else
                    Dim dr As DataRow
                    Dim intCon As Integer = 1
                    For Each dr In dt.Rows
                        If Not dr("activo") = "0" Then
                            dr("num") = intCon.ToString()
                            dr("nombre") = dr("nombre")
                            dr("cargo") = dr("cargo")
                            dr("idAsistente") = dr("idAsistente")
                            dr("idCorrelativo") = dr("idCorrelativo")
                            dr("activo") = dr("activo")
                            intCon += 1
                        Else
                            dr("num") = "0"
                        End If


                    Next
                End If
                gvAsistentes.DataSource = dt
                gvAsistentes.DataBind()
            End If
        End If

        'generamos el textare para cuando se ingrese valos multiples
        crecerTextArea()
        ResizeHeight()
    End Sub
    Private Sub crecerTextArea()
        ScriptManager.RegisterStartupScript(Page, Page.GetType, "demo", "Redimensionar();", True)
    End Sub
    Public Sub ResizeHeight()
        ScriptManager.RegisterStartupScript(Page, Page.GetType, "Resize", "javascript:recargarFrame()", True)
    End Sub
    Private Sub llenarAsistentes()
        Dim dt As New DataTable
        Dim obj As Object
        obj = CType(ViewState("Asistentes"), DataTable)

        If (Not obj Is Nothing) Then
            dt = CType(obj, DataTable)
            'ScriptManager.RegisterStartupScript(Page, Page.GetType, "demo", "alert('" + dt.Rows(0).Item(2).ToString() + "');", True)
        Else
            dt = crearTableAsistentes()
        End If
        Dim drs() As DataRow = dt.Select("activo = 1")
        Dim dr As DataRow
        dr = dt.NewRow()
        dr("num") = (drs.Length + 1).ToString()
        dr("idCorrelativo") = ""
        dr("idAsistente") = ""
        dr("id") = ""
        dr("nombre") = ""
        dr("cargo") = ""
        dr("activo") = "1"
        dt.Rows.Add(dr)
        gvAsistentes.DataSource = dt
        gvAsistentes.DataBind()
        ViewState("Asistentes") = dt
    End Sub

    Private Function crearTableAsistentes() As DataTable
        Dim dt As New DataTable
        dt.Columns.Add(New DataColumn("idCorrelativo", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("id", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("num", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("idAsistente", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("nombre", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("cargo", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("activo", Type.GetType("System.String")))
        Return dt
    End Function

    Public Function verificarPermisos() As Boolean
        Dim intID As Integer = Convert.ToInt32(Request.QueryString("ID"))
        Dim Util As New utiles()
        
        Dim SystemAdm As String = ConfigurationManager.AppSettings(CONSTANTES.usuarioPrivilegio)
        Dim site As SPSite = New SPSite("demo") 'impersonalizar()
        Dim Web As SPWeb = site.OpenWeb()
        Dim lista As SPList = Web.Lists(ConfigurationManager.AppSettings(CONSTANTES.listaActas).ToString())

        Dim _item As SPListItem = lista.GetItemById(intID)
        Dim _usuActual As SPUser = Web.SiteUsers(HttpContext.Current.User.Identity.Name.ToString())
        Dim _usuAdmin As SPUser = Web.SiteUsers(SystemAdm)

        'Response.Write(_usuActual.LoginName & " " & _usuAdmin.LoginName)

        If _usuAdmin.LoginName <> _usuActual.LoginName Then
            Dim blnActivo As Boolean = False
            Dim _ColeccionRoles As SPRoleAssignmentCollection = _item.RoleAssignments
            For Each _rol As SPRoleAssignment In _ColeccionRoles
                If _rol.Member.GetType().ToString() = "Microsoft.SharePoint.SPUser" Then
                    Dim _User As SPUser = DirectCast(_rol.Member, SPUser)

                    If _User.LoginName = _usuActual.LoginName Then
                        blnActivo = True
                        Exit For
                    End If
                ElseIf _rol.Member.GetType().ToString() = "Microsoft.SharePoint.SPGroup" Then
                    Dim groupName As String = _rol.Member.ToString()
                    Dim _Group As SPGroup = Web.SiteGroups(groupName)
                    Dim _users As SPUserCollection = _Group.Users
                    For Each _User As SPUser In _users

                        If _User.LoginName = _usuActual.LoginName Then
                            blnActivo = True
                            Exit For
                        End If
                    Next
                End If
            Next


            If blnActivo = False Then
                Response.Redirect(ConfigurationManager.AppSettings("Form_Nopermitido").ToString())
                Return False
            End If

        End If
        Return True

    End Function

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        AjaxPro.Utility.RegisterTypeForAjax(GetType(actaInvitacion))

        If (Page.IsPostBack = False) Then
            REM aqui comenzare mi codigo
            AutoCompleteExtender1.UseContextKey = True
            AutoCompleteExtender1.ContextKey = "ID"

            ddlEquipoTrabajo.DataSource = equipoBL.listarEquipos()
            ddlEquipoTrabajo.DataTextField = "descripcion"
            ddlEquipoTrabajo.DataValueField = "equipo_id"
            ddlEquipoTrabajo.DataBind()


            Dim lugarBL As New lugarBL
            ddllugar.DataSource = lugarBL.listarLugares
            ddllugar.DataValueField = "idlugar"
            ddllugar.DataTextField = "lugar"
            ddllugar.DataBind()
            Lbdenominacion.Text = New actasBL().RecuperarDenominacionActual.ToString
            'txtsemana.Text = numeroSemana("").ToString()
            txtFechaActa.Text = Date.Now().ToString("dd/MM/yyyy")
            'txtFechaActa.Attributes.Add("onBlur", "javascript:numeroSemanaInvitacion(this,'" + txtsemana.ClientID + "');")

            'txtduracion.Text = duracion("10:13", "18:30")
            ', equipo_id, 

            REM------------------------------

            'asignar valor a controles
            'txtinicio.Attributes.Add("onBlur", "javascript:mostrarHorasInvitacion('" & Me.txtinicio.ClientID & "','" & Me.txtfin.ClientID & "','" & txtduracion.ClientID & "')")
            'txtfin.Attributes.Add("onBlur", "javascript:mostrarHorasInvitacion('" & Me.txtinicio.ClientID & "','" & Me.txtfin.ClientID & "','" & txtduracion.ClientID & "')")
        End If
        'Response.Write(duracion("02:20", "05:30"))
        'ResizeHeight()
    End Sub

    <AjaxMethod()> _
    Public Function numeroSemana(ByVal strFecha As String) As Integer
        If (strFecha.Length = 10) Then
            Dim fecha As New DateTime(strFecha.Substring(6, 4), strFecha.Substring(3, 2), strFecha.Substring(0, 2))
            Return DateDiff(DateInterval.WeekOfYear, New DateTime(fecha.Date.Year, 1, 1), fecha.Date)
        Else
            Return DateDiff(DateInterval.WeekOfYear, New DateTime(Date.Now.Year, 1, 1), Date.Now)

        End If
    End Function

    Protected Sub ddlEquipoTrabajo_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlEquipoTrabajo.SelectedIndexChanged

        If ddlEquipoTrabajo.SelectedValue.Trim = "" Then
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "equipoVacio", "alert('Elija un equipo del la seleccion multiple');", True)
            Return
        End If

        gvAsistentes.DataSource = BuscarEmpleados()
        gvAsistentes.DataBind()
        'asigno un valor al selected values de autocomplete extender 
        ' AutoCompleteExtender1.ContextKey = ddlEquipoTrabajo.SelectedValue
        limpiarCamposDependientes()
        crecerTextArea()
        ResizeHeight()
    End Sub

    Public Sub limpiarCamposDependientes()
        txtidAsunto.Value = ""
        txtAsunto.Text = ""
        txtidmodderador.Value = ""
        txtmoderador.Text = ""
        'txtidSecretario.Value = ""
        'txtsecretario.Text = ""
        txtidFacilitador.Value = ""
        txtfacilitador.Text = ""
    End Sub

    Public Function BuscarEmpleadosbto() As DataTable
        Dim dtEmpleados As New DataTable
        Dim AccionesWF As New AccionesWF
        Dim equipoBL As New equiposBL
        Dim strGrupo As String = equipoBL.recuperarGrupoIntegrante(ddlEquipoTrabajo.SelectedValue)
        Dim strGrupoModeradores As String = equipoBL.recuperarGrupoModeradores(ddlEquipoTrabajo.SelectedValue)

        strGrupo = Util.SepararCuenta(strGrupo)
        strGrupoModeradores = Util.SepararCuenta(strGrupoModeradores)

        ' Dim sitio As SPSite = impersonalizar()
        ' Dim web As SPWeb = sitio.OpenWeb()
        Try
            ' Dim Grupo As SPGroup = web.SiteGroups(strGrupo)
            ' Dim GrupoModeradores As SPGroup = web.SiteGroups(strGrupoModeradores)

            'Dim users As SPUserCollection = Grupo.Users
            ' Dim UsersModeradores As SPUserCollection = GrupoModeradores.Users

            Dim intcont As Integer = 0
            Dim objXmlDocument As XmlDocument = New XmlDocument


            Dim objXmlNode As XmlNode

            '//creacion del objeto nodo elemento
            objXmlNode = objXmlDocument.CreateElement("Usuarios")
            '//agregacion del nodo al documento
            objXmlDocument.AppendChild(objXmlNode)

            'For Each User As SPUser In users
            intcont += 1
            'User.LoginName
            objXmlNode = objXmlDocument.CreateElement("usuario")
            objXmlDocument.DocumentElement.PrependChild(objXmlNode)

            Dim nodeCuenta As XmlElement = objXmlDocument.CreateElement("cuenta")
            'Dim TextCuenta As XmlText = objXmlDocument.CreateTextNode(User.LoginName.ToString())
            Dim TextCuenta As XmlText = objXmlDocument.CreateTextNode("CMPMINA\HNAVARRO")
            objXmlNode.AppendChild(nodeCuenta)
            nodeCuenta.AppendChild(TextCuenta)

            'Next

            'For Each User As SPUser In UsersModeradores
            '    'User.LoginName
            '    objXmlNode = objXmlDocument.CreateElement("usuario")
            '    objXmlDocument.DocumentElement.PrependChild(objXmlNode)

            '    Dim nodeCuenta As XmlElement = objXmlDocument.CreateElement("cuenta")
            '    Dim TextCuenta As XmlText = objXmlDocument.CreateTextNode(User.LoginName.ToString())

            '    objXmlNode.AppendChild(nodeCuenta)
            '    nodeCuenta.AppendChild(TextCuenta)
            'Next


            dtEmpleados = equipoBL.BuscarEmpleadosMasa(objXmlDocument)


            'Web.Close()
            'sitio.Close()
            Return dtEmpleados
        Catch ex As Exception
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "noGrupo", "alert('No Existe el grupo de integrantes para este equipo');", True)
            Return dtEmpleados
        End Try

    End Function


    Public Function BuscarEmpleados() As DataTable
        Dim dtEmpleados As New DataTable
        Dim AccionesWF As New AccionesWF
        Dim equipoBL As New equiposBL
        Dim strGrupo As String = equipoBL.recuperarGrupoIntegrante(ddlEquipoTrabajo.SelectedValue)
        Dim strGrupoModeradores As String = equipoBL.recuperarGrupoModeradores(ddlEquipoTrabajo.SelectedValue)

        strGrupo = Util.SepararCuenta(strGrupo)
        strGrupoModeradores = Util.SepararCuenta(strGrupoModeradores)

        Dim sitio As SPSite = impersonalizar()
        Dim web As SPWeb = sitio.OpenWeb()
        Try
            Dim Grupo As SPGroup = web.SiteGroups(strGrupo)
            Dim GrupoModeradores As SPGroup = web.SiteGroups(strGrupoModeradores)

            Dim users As SPUserCollection = Grupo.Users
            Dim UsersModeradores As SPUserCollection = GrupoModeradores.Users

            Dim intcont As Integer = 0
            Dim objXmlDocument As XmlDocument = New XmlDocument


            Dim objXmlNode As XmlNode

            '//creacion del objeto nodo elemento
            objXmlNode = objXmlDocument.CreateElement("Usuarios")
            '//agregacion del nodo al documento
            objXmlDocument.AppendChild(objXmlNode)

            For Each User As SPUser In users
                intcont += 1
                'User.LoginName
                objXmlNode = objXmlDocument.CreateElement("usuario")
                objXmlDocument.DocumentElement.PrependChild(objXmlNode)

                Dim nodeCuenta As XmlElement = objXmlDocument.CreateElement("cuenta")
                Dim TextCuenta As XmlText = objXmlDocument.CreateTextNode(User.LoginName.ToString())

                objXmlNode.AppendChild(nodeCuenta)
                nodeCuenta.AppendChild(TextCuenta)

            Next

            For Each User As SPUser In UsersModeradores
                'User.LoginName
                objXmlNode = objXmlDocument.CreateElement("usuario")
                objXmlDocument.DocumentElement.PrependChild(objXmlNode)

                Dim nodeCuenta As XmlElement = objXmlDocument.CreateElement("cuenta")
                Dim TextCuenta As XmlText = objXmlDocument.CreateTextNode(User.LoginName.ToString())

                objXmlNode.AppendChild(nodeCuenta)
                nodeCuenta.AppendChild(TextCuenta)

            Next


            dtEmpleados = equipoBL.BuscarEmpleadosMasa(objXmlDocument)
            

            web.Close()
            sitio.Close()
            Return dtEmpleados
        Catch ex As Exception
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "noGrupo", "alert('No Existe el grupo de integrantes para este equipo');", True)
            Return dtEmpleados
        End Try

    End Function

    Public Function ValidarUsuariosSharepoint() As Boolean
        Dim usuBL As New usuariosBL
        Dim strCuenta As String = usuBL.BuscarActiveDirectory(txtidmodderador.Value)
        If strCuenta = "" Then
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "validacionActive", "alert('Cabecera:\nEl Usuario moderador no tiene Cuenta de Active Directory_" & txtidmodderador.Value & "_" & strCuenta & "_');", True)
            Return False
        Else
            If Util.ExisteUsuario(strCuenta) = False Then
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "validacionActive", "alert('Cabecera:\nEl Usuario moderador no esta registrado en el sistema de Sharepoint');", True)
                Return False
            End If
        End If

        'strCuenta = usuBL.BuscarActiveDirectory(txtidSecretario.Value)
        If strCuenta = "" Then
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "validacionActive", "alert('Cabecera:\nEl Usuario Secretario no tiene Cuenta de Active Directory');", True)
            Return False
        Else
            If Util.ExisteUsuario(strCuenta) = False Then
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "validacionActive", "alert('Cabecera:\nEl Usuario Secretario no esta registrado en el sistema de Sharepoint');", True)
                Return False
            End If
        End If

        strCuenta = usuBL.BuscarActiveDirectory(txtidFacilitador.Value)
        If strCuenta = "" Then
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "validacionActive", "alert('Cabecera:\nEl Usuario Facilitador no tiene Cuenta de Active Directory');", True)
            Return False
        Else
            If Util.ExisteUsuario(strCuenta) = False Then
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "validacionActive", "alert('Cabecera:\nEl Usuario Facilitador no esta registrado en el sistema de Sharepoint');", True)
                Return False
            End If
        End If

        'si todo esta bien
        Return True
    End Function
    'para inporsonalizar los items
    Private Function impersonalizar() As SPSite
        Dim miSite As New SPSite(ConfigurationManager.AppSettings(CONSTANTES.siteACTA))
        Dim miWeb As SPWeb = miSite.OpenWeb()
        Dim user As SPUser = miWeb.AllUsers(ConfigurationManager.AppSettings(CONSTANTES.usuarioPrivilegio))

        Dim mitoken As SPUserToken = user.UserToken
        miSite = New SPSite(ConfigurationManager.AppSettings(CONSTANTES.siteACTA), mitoken)
        Return miSite
    End Function

    Public Sub bloquearButton(ByVal estado As Boolean)
        If estado = True Then
            lbGuardar.Enabled = True
            lbRetornar.Enabled = True
        Else
            lbGuardar.Enabled = False
            lbRetornar.Enabled = False
        End If

    End Sub

    Public Function validarFormulario() As Boolean
        Dim gvRow As GridViewRow
        Dim strActivo As String = ""

        If ddlEquipoTrabajo.SelectedValue.Trim = "" Then
            Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Cabecera:\nSeleccione un Equipo de trabajo');", True)
            Return False
        End If

        If txtAsunto.Text.Trim = "" Then
            Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Cabecera:\nIngrese el asunto');", True)
            Return Nothing
        End If


        If txtidArea.Value = "" Then
            Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Cabecera:\nIngrese el Area de Trabajo');", True)
            Return False
        End If

        If ddllugar.SelectedValue.Trim = "" Then
            Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Cabecera:\nSeleccione el Lugar');", True)
            Return False
        End If

        If ddllugar.SelectedValue.Trim = "-1" Then
            If txtOtroLugar.Text = "" Then
                Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Cabecera:\nIngrese la descripcion del otro lugar');", True)
                txtOtroLugar.Focus()
                Return False
            End If
        End If

        If ValidarUsuariosSharepoint() = False Then
            Return False
        End If

        'agregar la validacion de horas y de fecha 
        '*********************************************

        If gvAsistentes.Rows.Count = 0 Then
            Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Asistentes:\nFalta agregar Asistentes al Acta');", True)
            Return False
        End If


        For Each gvRow In gvAsistentes.Rows
            Dim hdText As New HiddenField
            Dim hdText2 As New TextBox
            Dim hdText3 As New TextBox

            hdText = CType(gvRow.FindControl("txtidAsistente"), HiddenField)
            hdText2 = CType(gvRow.FindControl("txtnomAsistente"), TextBox)
            hdText3 = CType(gvRow.FindControl("txtcargoAsistente"), TextBox)
            strActivo = gvAsistentes.DataKeys(gvRow.RowIndex).Item("activo")

            If hdText.Value = "" And strActivo = "1" Then
                If (hdText2.Text.Trim = "" Or hdText3.Text.Trim = "") And strActivo = "1" Then
                    Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Asistentes:\nFalta agregar Asistentes al Acta');", True)
                    hdText2.Focus()
                    Return False
                End If
                If Util.IsMail(hdText3.Text.Trim) = False Then
                    Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Asistentes:\nEl Email ingresado para el Asistente es Erroneo " & hdText3.Text.Trim & "');", True)
                    hdText3.Focus()
                    Return False
                End If
            End If

            If strActivo = "1" Then
                For Each gvDetail As GridViewRow In gvAsistentes.Rows
                    Dim _hdText As New HiddenField
                    Dim _hdText2 As New TextBox
                    Dim _hdText3 As New TextBox
                    Dim _strActivo As String = ""

                    _hdText = CType(gvDetail.FindControl("txtidAsistente"), HiddenField)
                    _hdText2 = CType(gvDetail.FindControl("txtnomAsistente"), TextBox)
                    _hdText3 = CType(gvDetail.FindControl("txtcargoAsistente"), TextBox)
                    _strActivo = gvAsistentes.DataKeys(gvDetail.RowIndex).Item("activo")

                    If _strActivo = "1" And gvRow.RowIndex <> gvDetail.RowIndex Then
                        If hdText.Value.Trim <> "" Then
                            If _hdText.Value = hdText.Value Then
                                Page.ClientScript.RegisterStartupScript(Page.GetType, "validacion1", "alert('Asistentes:\nHay Asistentes Repetidos');", True)
                                _hdText2.Focus()
                                Return False
                            End If
                        End If
                    End If
                Next
            End If
        Next

        Return True
    End Function

    Public Function guardarInformacion(ByVal EstadoFlujo As String) As Integer

        Dim dt As New DataTable
        Dim invitacionBE As New invitacionBE
        Dim AcuerdoBL As New acuerdosBL
        Dim BLInvitacion As New invitacionBL
        Dim strAsuntoId As String
        '##############################################################
        'validar si se ha ingresado informacion correcta en la grilla



        If (txtidAsunto.Value = "") Then
            Dim asuntoBE As New asuntoBE
            Dim asuntoBL As New asuntoBL
            asuntoBE.idAsunto = 0
            asuntoBE.descAsunto = txtAsunto.Text
            asuntoBE.equipo_id = ddlEquipoTrabajo.SelectedValue
            asuntoBE.activo = 1
            strAsuntoId = asuntoBL.GrabarAsunto(asuntoBE)
            'verifico si el dato recogido es entero
            Dim intCodigoAsunto As Int32
            Dim blnEstadoAsunto As Boolean = Int32.TryParse(strAsuntoId, intCodigoAsunto)
            If blnEstadoAsunto Then
                strAsuntoId = intCodigoAsunto.ToString()
            Else
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Asunto_errorm", "alert('Asunto:\n" + strAsuntoId + "');", True)
            End If
        Else
            strAsuntoId = txtidAsunto.Value.ToString()
        End If


        'agrego la informacion a grabar de invitacion
        invitacionBE.idInvitacion = 0
        invitacionBE.Invitacion_Num = txtnumacta.Text
        invitacionBE.equipo_Id = ddlEquipoTrabajo.SelectedValue
        invitacionBE.idArea = txtidArea.Value
        invitacionBE.idLugar = ddllugar.SelectedValue
        invitacionBE.idCompania = 1
        invitacionBE.id_Asunto = Convert.ToInt32(strAsuntoId)
        invitacionBE.otroLugar = IIf(ddllugar.SelectedValue = "-1", txtOtroLugar.Text, "")
        invitacionBE.idLugar = ddllugar.SelectedValue
        invitacionBE.Moderador = txtidmodderador.Value
        'invitacionBE.Secretario = txtidSecretario.Value
        invitacionBE.Facilitador = txtidFacilitador.Value
        invitacionBE.Fecha = Util.formatearFecha(txtFechaActa.Text, 1)
        'invitacionBE.Semana = numeroSemana(txtsemana.Text)
        invitacionBE.Inicio = txtinicio.Text
        invitacionBE.Fin = txtfin.Text
        invitacionBE.Duracion = Util.duracion(txtinicio.Text, txtfin.Text) 'calculamos la duracion
        invitacionBE.Activo = 1
        invitacionBE.usuario_creado = HttpContext.Current.User.Identity.Name.ToString()
        invitacionBE.usuario_modificado = ""
        invitacionBE.observacion = ftbObservacion.Text 'txtObservacion.Text.Trim
        'generamos los asistentes y guardamos la informacion de los asistentes
        agregarAsistentes()
        dt = New DataTable()
        dt = CType(ViewState("Asistentes"), DataTable)


        Dim detAsistente As invitacionBE.AsistentesActa
        Dim lstAsist As New List(Of invitacionBE.AsistentesActa)
        'recorro todas las ocurrencias que puedan sucitarse
        For Each dr As DataRow In dt.Rows
            If Not (dr("idCorrelativo") = "" And dr("activo") = "0") Then
                detAsistente = New invitacionBE.AsistentesActa()
                detAsistente.idCorrelativo = IIf(dr("idCorrelativo") = "", "0", dr("idCorrelativo"))
                detAsistente.idAsistente = dr("idAsistente")
                detAsistente.nombre = dr("nombre").ToString()
                detAsistente.cargo = dr("cargo").ToString()
                detAsistente.activo = Convert.ToInt32(dr("activo"))
                lstAsist.Add(detAsistente)
            End If
        Next

        'agregamos nuestra lista a la lista de actas
        invitacionBE.ListaAsistente = lstAsist

        'grabo la informacion
        Dim strMensaje As String = BLInvitacion.GrabarInvitacion(invitacionBE)

        'verifico si el dato recogido es entero
        Dim intCodigo As Int32
        Dim blnEstado As Boolean = Int32.TryParse(strMensaje, intCodigo)
        If (blnEstado) Then
            Return intCodigo
        Else
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "mensaje_1", "alert('" + strMensaje + "');", True)
            Return Nothing
        End If

    End Function

    Public Sub GrabarSharepoint(ByVal intIdInvitacion As Integer)
        Try
            Dim _url As String = Util.retornarParametros("Form_Consulta_Invitacion")
            Dim BlInvitacion As New invitacionBL
            Dim sitio As SPSite = impersonalizar()

            Dim web As SPWeb = sitio.OpenWeb

            web.AllowUnsafeUpdates = True

            Dim listaInvitacion As SPList = web.Lists(ConfigurationManager.AppSettings("Lista_Invitacion").ToString)



            Dim item As SPListItem = listaInvitacion.Items.Add()
            Dim dtInvitacion As New DataTable
            dtInvitacion = BlInvitacion.ListarInvitacionXInvitacion(intIdInvitacion)
            'ScriptManager.RegisterStartupScript(Page, Page.GetType(), "alert001", "alert('" + listaInvitacion.ID.ToString + "');", True)



            If dtInvitacion.Rows.Count > 0 Then


                'Dim User As SPUser = web.Users(dtInvitacion.Rows(0).Item("MODERADOR").ToString)
                'Dim _spModeradorValue As SPFieldUserValue = New SPFieldUserValue(web, User.ID, User.LoginName)

                'User = web.Users(dtInvitacion.Rows(0).Item("SECRETARIO").ToString)
                'Dim _spSecretarioValue As SPFieldUserValue = New SPFieldUserValue(web, User.ID, User.LoginName)

                'User = web.Users(dtInvitacion.Rows(0).Item("FACILITADOR").ToString)
                'Dim _spFacilitadorValue As SPFieldUserValue = New SPFieldUserValue(web, User.ID, User.LoginName)
                'item("equipoId") = dtInvitacion.Rows(0).Item("equipo_id").ToString
                'item("Moderador") = _spModeradorValue
                'item("Secretario") = _spSecretarioValue
                'item("Facilitador") = _spFacilitadorValue
                item("Fecha Invitación") = Util.convertirFecha(dtInvitacion.Rows(0).Item("FECHA").ToString, 2) 'Util.formatearFecha(dtInvitacion.Rows(0).Item("FECHA").ToString, 2)
                'item("Número de Semana") = dtInvitacion.Rows(0).Item("SEMANA").ToString
                item("Hora Inicio") = dtInvitacion.Rows(0).Item("INICIO").ToString
                item("Hora Fin") = dtInvitacion.Rows(0).Item("FIN").ToString
                item("Duración") = dtInvitacion.Rows(0).Item("DURACION").ToString
                'item("idArea") = dtInvitacion.Rows(0).Item("IDAREA").ToString
                item("Area") = dtInvitacion.Rows(0).Item("AREA").ToString
                'item("idAsunto") = dtInvitacion.Rows(0).Item("IDASUNTO").ToString
                item("Asunto") = dtInvitacion.Rows(0).Item("ASUNTO").ToString
                'item("idLugar") = dtInvitacion.Rows(0).Item("IDLUGAR").ToString
                item("Lugar") = dtInvitacion.Rows(0).Item("LUGAR").ToString
                'item("Otro Lugar") = dtInvitacion.Rows(0).Item("OTROLUGAR").ToString
                'item("idCompania") = dtInvitacion.Rows(0).Item("IDCOMPANIA").ToString
                'item("idInvitacion") = dtInvitacion.Rows(0).Item("IDINVITACION").ToString
                'item("invitacionNum") = dtInvitacion.Rows(0).Item("INVITACIONNUM").ToString
                item("Observación") = dtInvitacion.Rows(0).Item("OBSERVACION").ToString
                item.Update()
                BlInvitacion.ActualizarIDSharepoint(intIdInvitacion, item.ID)
                Dim urlConsulta As New SPFieldUrlValue
                urlConsulta.Description = "Ver Solicitud"
                urlConsulta.Url = _url & "?ID=" & item.ID.ToString()
                item("Ver Solicitud") = urlConsulta
                item.Update()
                Try
                    Dim strGrupoSP As String = BlInvitacion.grupoSharepointXInvitacion(intIdInvitacion)
                    Response.Write(strGrupoSP)
                    AccionesWF.establecerPermiso(item, "No", "'" & Util.SepararCuenta(strGrupoSP) & "'", "Equipo_Moderadores")
                    AccionesWF.establecerPermiso(item, "Si", "'" & ConfigurationManager.AppSettings(CONSTANTES.usuarioPrivilegio).ToString() & "'", "Equipo_Moderadores")
                Catch ex As Exception

                End Try
            End If
            web.AllowUnsafeUpdates = False
            web.Close()
            web.Dispose()
            sitio.Close()
            sitio.Dispose()
        Catch ex As Exception
            Response.Write(ex.Message)
        End Try
    End Sub

    Protected Sub lbGuardar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbGuardar.Click, lbGuardar1.Click
        'llamamos al metodo para insertar la cabecera y detalle
        Dim invitacion As New invitacionBL
        Dim dtAsistente As New DataTable
        Dim dtInvitacion As New DataTable

        'Dim _smtp As String = Util.retornarParametros("smtp")
        'Dim _From As String = Util.retornarParametros("mailSmtp")
        'Dim _FromPass As String = Util.retornarParametros("mailPassword")

        'Dim _descFrom As String = Util.retornarParametros("FromSmtp")
        'Dim intCont As Integer = 0
        'Dim strInvitados As String = ""

        'If validarFormulario() = False Then
        '    bloquearButton(True)
        '    Return
        'End If

        'ver
        Dim intIdInvitacion As Integer = guardarInformacion("En Proceso")
        If intIdInvitacion <> Nothing Then
            GrabarSharepoint(intIdInvitacion)
        End If


        dtAsistente = invitacion.listarAsistentesInvitacion_mail(intIdInvitacion)
        dtInvitacion = invitacion.listarInvitacionCabecera_mail(intIdInvitacion)

        'Dim oApp As Outlook._Application
        'oApp = New Outlook.Application()

        'Dim outlookApp As New Sample

        'Sample.SendEmailFromAccount(oApp, "esto es una pruebita", "solo es prueba de demostracion", "administrator@ctovsw2k3.com", "192.168.1.210")
        If dtInvitacion.Rows.Count > 0 Then

            Dim FIni As DateTime = Util.Convertir_a_DateTime(dtInvitacion.Rows(0).Item("FECHA").ToString, dtInvitacion.Rows(0).Item("INICIO").ToString)
            Dim FFin As DateTime = Util.Convertir_a_DateTime(dtInvitacion.Rows(0).Item("FECHA").ToString, dtInvitacion.Rows(0).Item("FIN").ToString)
            Dim Invitados As New List(Of String)
            For Each dr As DataRow In dtAsistente.Rows
                Invitados.Add(dr("EMAIL").ToString())
            Next
            'If Invitados.Count > 0 Then
            '    Dim Cita As AppointmentBLL
            '    Dim strAsunto As String = dtInvitacion.Rows(0).Item("ASUNTO").ToString & " -  Numero de Solicitud " & dtInvitacion.Rows(0).Item("Invitacion_num").ToString
            '    Cita = New AppointmentBLL(FIni, FFin, strAsunto, dtInvitacion.Rows(0).Item("observacion").ToString, dtInvitacion.Rows(0).Item("LUGAR").ToString, Nothing, Invitados, _descFrom, _From, _FromPass, _smtp)
            '    Try
            '        Cita.EmailAppointment()
            '    Catch ex As Exception

            '    End Try
            'End If
        End If
        'aqui Envio mensaje de confirmacion todo OK
        Response.Write("<script>" & _
                       "alert('Su Invitación se Guardó correctamente');" & _
                        "window.parent.location.href='" & ConfigurationManager.AppSettings("bandejaInvitacion").ToString() & "';" & _
                        "</script>")

    End Sub



    Protected Sub lbAgregarAsis_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbAgregarAsis.Click
        REM agrega los valores que se escribieron en el gridview
        agregarAsistentes()
        REM agrega una nueva fila a los valores que ya existen
        llenarAsistentes()
        crecerTextArea()
        ResizeHeight()
    End Sub

    Protected Sub lbRetornar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbRetornar.Click, lbRetornar1.Click
        Response.Write("<script>window.parent.location.href='" & ConfigurationManager.AppSettings("bandejaInvitacion").ToString() & "';</script>")
    End Sub

    Protected Sub ddllugar_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddllugar.SelectedIndexChanged
        If ddllugar.SelectedValue = "-1" Then
            pnlOtroLugar.Visible = True
            txtOtroLugar.Focus()
        Else
            pnlOtroLugar.Visible = False
        End If
        crecerTextArea()
        ResizeHeight()
    End Sub



    Protected Sub lbLimpiarAsunto_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbLimpiarAsunto.Click
        txtAsunto.Text = ""
        txtidAsunto.Value = ""
    End Sub
End Class
